package cn.yinyu.queue.module.ecg.service.appointment;

import cn.yinyu.queue.module.ecg.controller.admin.appointment.vo.*;
import cn.yinyu.queue.module.ecg.dal.dataobject.appointment.AppointmentDO;
import cn.yinyu.queue.framework.common.pojo.PageResult;

import javax.validation.Valid;
import java.util.List;

/**
 * 预约 Service 接口
 *
 * @author 马剑波
 */
public interface AppointmentService {

    /**
     * 创建预约
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createAppointment(@Valid AppointmentSaveReqVO createReqVO);

    /**
     * 更新预约
     *
     * @param updateReqVO 更新信息
     */
    void updateAppointment(@Valid AppointmentSaveReqVO updateReqVO);

    /**
     * 删除预约
     *
     * @param id 编号
     */
    void deleteAppointment(Long id);

    /**
     * 获得预约
     *
     * @param id 编号
     * @return 预约
     */
    AppointmentDO getAppointment(Long id);

    /**
     * 获得当天的预约 根据PatID and CheckType
     *
     * @param patId 编号
     * @return 预约
     */
    AppointmentDO getCurAppointmentByPatIdAndCheckType(String patId, Integer checkType);

    /**
     * 获得预约
     *
     * @param patId 编号
     * @return 预约
     */
    List<AppointmentDO> queryAndCreateAppointmentByPatId(String patCode);

    /**
     * 获得预约分页
     *
     * @param pageReqVO 分页查询
     * @return 预约分页
     */
    PageResult<AppointmentDO> getAppointmentPage(AppointmentPageReqVO pageReqVO);

    List<AppointmentDO> getAppointmentExtermal(String patId);

    Integer appoitmentConfirm(AppointmentConfirmReqVO appointmentConfirmReqVO);
}
